/*
1.4版更新
ajax跨域函数更新:匿名函数封装，请求AjaxCrossDomain更加便捷

 */

//获取id的快捷方法
function $(para){
	return document.getElementById(para);
}

//加载函数
function loadFunc(func){
	var oldLoad = window.onload;
	if(typeof window.onload != 'function'){
		window.onload = func;
	}else{
		window.onload = function(){
			oldLoad();
			func();
		}
	}
}
//插入到某个元素节点之后  
function insertAfter(newElemet,targetElement){
	var parent=targetElement.parentNode;
	if(parent.lastChild == targetElement){
		parent.appendChild(newElement);
	}else{
		parent.insertBefore(newElement,targetElement.nextSibling);
	}
}

//兼容getElementsByClassName不能用的情况
function getElesByClassName(node,classname){
	if(node.getElementsByClassName){
		return node.getElementsByClassName(classname);
	}else{
		var result = new Array();
		//元素通配符选择
		var ele = node.getElementsByTagName('*');
		for(var i = 0; i< ele.length;i++){
			if(ele[i].className.indexOf(classname) != -1){
				result[result.length] = ele[i];
			}
		}
	}
	
	return result;
	
}

//增加一个类属性
function addClass(node,clsname){
	if(!node.className){
		node.className = clsname;
	}else{
		var classnow = node.className;
		node.className = classnow + ' ' + clsname;
	}
}
//删除某个类属性
function removeClass(node,clsname){
	//如果没有设置类属性
	if(!node.className) return;
	var classnow = node.className;
	//如果没有此类属性
	if(classnow.indexOf(clsname) == -1) return;
	var arr = classnow.split(' ');
	for(var i=0;i<arr.length;i++){
		if(arr[i].indexOf(clsname) != -1){
			arr.splice(i,1);
		}
	}
	node.className = arr.join(' ');

}
//得到节点之后的最接近的元素节点 (由于空格等原因导致有时候下一个节点是nodeType ==3)
function getNextElement(node){
	if(node.nodeType == 1){
		return node;
	}
	if(node.nextSibling){
		return getNextElement(node.nextSibling); //递归调用，判断是否是元素节点
	}
	return null;	
}
//动画效果函数
//传入参数 字符串(对象) | 开始位置，终点位置
//注意这里字符串必须为全局变量'obj',因为后面的setTimeout中的匿名函数具有全局性
//moveEle('obj',20,20,400,400,1000);
function moveEle(obj,start_l,start_t,end_l,end_t,time){
	var para = eval(obj);
	if(para.ele){
		clearTimeout(para.ele);
	}
	if(!para.style.left || !para.style.top){
		para.style.left = start_l+'px';
		para.style.top = start_t+'px';
	}
	//定义位置
	var left = parseInt(para.style.left);
	var top = parseInt(para.style.top);
	//满足条件则返回不再执行定时器
	if(left == end_l && top == end_t ){
		return true;
	}
	if(left > end_l ){
		left -= Math.ceil((left - end_l)/20) ;         //left--;
	}
	if(left < end_l ){
		left += Math.ceil((end_l - left)/20) ;    	  //left++;
	}
	if(top > end_t ){
		top -= Math.ceil((top - end_t)/20) ;         //top--;
	}
	if(top < end_t ){
		top += Math.ceil((end_t - top)/20) ;    	//top++;
	}
	
	para.style.left = left+'px';
	para.style.top = top+'px';
	//注意下面的obj 左右要加引号，因为ele是字符变量,所以不加引号，会报错，字符都要加引号
	var repeat="moveEle('"+obj+"',"+start_l+','+start_t+','+end_l+','+end_t+','+time+")";  //这里使用拼接，目的是为了继续向下执行，不拼接就相当于函数在这里运行了
	para.ele=setTimeout(repeat,time);
}
//封装AJAX 用法如下,注意为了完成异步，所以使用自定义一个callback函数
// var info = $ajax({
		// url:'123.php',
		// method:'POST',
		// data:{name:'zhanghao',age:18},
		// callback:function(msg){	//注意这里定义一个callback函数，用于异步，太经典了
			// alert(msg);
		// }
	// });
//使用ajax,创建单例模式
function $ajax(obj){
	//使用原型来绑定，保持单例模式，提高性能
	if(!($ajax.prototype.myajax instanceof Ajax)){
		 $ajax.prototype.myajax = new Ajax();			 
	}
	$ajax.prototype.myajax.transferInfo(obj);		
}
//ajax 1.首先编写一个构造器，用于编写原型对象
function Ajax(){}
//ajax 2.编写xmlhttprequest头函数
Ajax.prototype.getHttpObj = function(){
	if(typeof XMLHttpRequest == 'undefined'){
		XMLHttpRequest = function(){
			try{ return new ActiveXObject('Msxml2.XMLHTTP.6.0');}
			catch(e){}
			try{ return new ActiveXObject('Msxml2.XMLHTTP.3.0');}
			catch(e){}
			try{ return new ActiveXObject('Msxml2.XMLHTTP');}
			catch(e){}
			return false;
		}
	}
	return new XMLHttpRequest();
}
//ajax 3.编写xmlhttp请求函数	
Ajax.prototype.transferInfo = function(obj){
	var httpRequest = this.getHttpObj();
	if(!httpRequest){
		alert('您的浏览器不支持ajax技术');
		return false;
	}
	if(obj.method == 'POST'){
		httpRequest.open('POST',obj.url,true);
		httpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		noti = [];
		i=0;
		for(var name in obj.data){	
			//进行转码,对于POST防止消息失常			
			noti[i] = name + '=' + encodeURIComponent(obj.data[name]);
			i++;
		}
		var data = noti.join('&');  //合并数组，以&连接
		httpRequest.send(data);
	}
	if(obj.method == 'GET'){
		httpRequest.open('GET',obj.url,true);
		httpRequest.send();	
	}
	//注意这里是httpRequest对象调用ajax，所以函数内部不能用this
	//httpRequest.onreadystatechange = Person.getFunc(); 这里要注意，调用对象
	//注意Person.getFunc()里面的对象this指的就是httpRequst对象了
	httpRequest.onreadystatechange = function(){
		if(httpRequest.readyState == 4){
			if(httpRequest.status == 200){
				obj.callback(httpRequest.responseText);
			}
		}
	}
}

//拖拽函数
//传入准备拖拽的对象和拖拽的区域对象
function drag(img,area){
	img.onmousedown =  function(){
		area.onmousemove = function(ev){
			var e = ev || window.event;
			//console.log(img.offsetLeft);				
			var imgx= e.clientX -area.offsetLeft- img.offsetWidth/2 ;
			var imgy = e.clientY - area.offsetTop- img.offsetHeight/2 ;
			if(imgx<0){
				imgx = 0;
			}
			if(imgx>area.offsetWidth-img.offsetWidth){
				imgx = area.offsetWidth-img.offsetWidth;
			}
			if(imgy<0){
				imgy = 0;
			}
			if(imgy>area.offsetHeight-img.offsetHeight){
				imgy = area.offsetHeight-img.offsetHeight;
			}
			img.style.left = imgx + 'px';
			img.style.top = imgy + 'px';
			
		}
		//在整个文档中，当鼠标抬起，不再进行控制，否则图片跟着行走
		document.onmouseup = function(){
			area.onmousemove = null;
		}
		//为了去除浏览器闪影
		return false;
	}
}

//绑定的对象，事件，函数
function bindEvent(obj,event,func){
	if(window.attachEvent){
		//IE低版本
		obj.attachEvent('on'+event,func);
	}else{
		obj.addEventListener(event,func,false);
	}

}

//ajax跨域请求函数
//使用方法:
// AjaxCrossDomain('123.php?callback=?',function(para){
// 		alert(para);
// 		//进行操作即可
// 	})
function ajaxCrossDomain(url,func){
	var oScript = document.createElement('script');
	oScript.type = 'text/javascript';
	//正则匹配，筛出最后一个?	
	var preg = /(.*)\?$/ ;
	var res = preg.exec(url);
	//自动为callback回调函数赋值一个Domain留作匿名函数变量
	oScript.src = res[1] + 'CrossDomain';
	//给Domain赋予一个函数，由于是字符串，所以进行使用eval解析
	eval('CrossDomain =' + func);
	//追加到head,这样src标签才能进行跨域请求运行
	document.getElementsByTagName('head')[0].appendChild(oScript);
}

//string解析dom
function strTransferDom(arg) { 
　　 var objE = document.createElement("div"); 
　　 objE.innerHTML = arg; 
　　 return objE.childNodes; 
}